package com.yp.pay.facade;

import com.yp.pay.StrategyContext.PayContext;
import com.yp.pay.StrategyEnum.StrategyEnum;
import com.yp.pay.factory.StrategyFactory;
import com.yp.pay.pojo.PayBody;
import com.yp.pay.strategy.PayStrategy;

public class StrategyFacade {
    public static Boolean pay(PayBody payBody) {
        StrategyEnum strategyEnum = getStrategyEnum(payBody.getType());
        if (strategyEnum == null) {
            return false;
        }
        PayStrategy payStrategy = StrategyFactory.getPayStrategy(strategyEnum);
        PayContext payContext = new PayContext(payStrategy);
        return payContext.execute(payBody);
    }

    private static StrategyEnum getStrategyEnum(int type) {
        switch (type) {
            case 0:
                return StrategyEnum.AliPayStrategy;
            case 1:
                return StrategyEnum.WxPayStrategy;
            case 2:
                return StrategyEnum.BankPayStrategy;
            default:
                return null;
        }
    }
}
